package com.jade.modules.config;

import java.util.List;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 配置项数据访问接口。
 *
 * @author sky
 * @version 1.0 14-11-21 下午3:59
 */
public interface ConfigDao
{
    /**
     * 获取配置项实体对象列表。
     *
     * @param ownerType 所有者类型
     * @param ownerId   所有者标识
     * @param group      配置项组
     * @return 配置项实体对象列表
     */
    public List<ConfigEntity> listEntity(String ownerType, String ownerId, String group);

    /**
     * 查询配置项实体对象列表。
     *
     * @param ownerType 所有者类型
     * @param ownerId   所有者标识
     * @param criteria 查询条件
     * @return 配置项实体对象列表
     */
    public PagingList<ConfigEntity> queryEntity(String ownerType, String ownerId, Criteria criteria);


    /**
     * 添加一个新的配置项。
     *
     * @param entity 配置项实体对象
     */
    public void addEntity(ConfigEntity entity)
            throws ConfigException;


    /**
     * 更改配置项。
     *
     * @param entity 配置项实体对象
     */
    public void updateEntity(ConfigEntity entity)
            throws ConfigException;

    /**
     * 获取配置项。
     *
     * @param id 配置项标识
     * @return 配置项对象实体。
     */
    public ConfigEntity getEntity(long id);

    /**
     * 获取配置项。
     *
     * @param ownerType 所有者类型
     * @param ownerId   所有者标识
     * @param group      配置项组
     * @param key 配置项key
     * @return 配置项对象
     */
    public ConfigEntity getEntity(String ownerType, String ownerId, String group, String key);

    /**
     * 删除指定的配置项。
     *
     * @param entity 配置项实体对象
     */
    public void removeEntity(ConfigEntity entity)
            throws ConfigException;

    List<ConfigGroupEntity> listGroup(String ownerType, String ownerId);

    ConfigGroupEntity getGroup(long id);

    ConfigGroupEntity getGroup(String ownerType, String ownerId, String key);

    public PagingList<ConfigGroupEntity> queryGroup(String ownerType, String ownerId, Criteria criteria);

    /**
     * 新增一个数组
     * @throws ConfigException
     */
    public void addGroup(ConfigGroupEntity groupEntity) throws ConfigException;

    /**
     * 修改分组数据
     * @param groupEntity
     * @throws ConfigException
     */
    public void updateGroup(ConfigGroupEntity groupEntity) throws ConfigException;

    /**
     * 删除分组项
     * @param groupEntity
     * @throws ConfigException
     */
    public void removeGroup(ConfigGroupEntity groupEntity) throws ConfigException;
}
